{\fad(200,200)}翻译/压制/字幕制作:HAF半个水果
{\fad(200,200)\pos(1925.334,645.333)}使用AI工具翻译,如有不准确的地方请在弹幕或评论区指正,谢谢!
{\fad(200,200)\pos(1925.334,645.333)}翻译质量权威评价:原来25年就有小拉即用机翻糊弄人了
{\fad(200,200)\pos(1928,2076)}Windows的通知是如何工作的?
{\fad(200,200)\pos(1856,169.333)}大家好!Windows系统中的通知功能是个非常有趣的话题
{\fad(200,200)\pos(1869.333,478.666)}我们早已习惯它们作为应用程序偶尔弹出的无状态气泡提醒
{\fad(200,200)\move(1872,171.999,1872,-25.334,6736,6986)}不过,Windows的近期版本中包含了操作中心
{\fad(200,200)\move(1874.666,469.333,1877.333,-24,6736,6986)}这在Windows Phone 8.1之前是不存在的。它已经问世11年了
{\fad(200,200)\move(2000,2260,2000,1820,10,160)}不过,Windows的近期版本中包含了操作中心
{\fad(200,200)\move(1986.667,2265.333,1992,2110.666,10,160)}这在Windows Phone 8.1之前是不存在的。它已经问世11年了
{\fad(200,200)\pos(1984,1817.333)}如你所见,自Windows 8起,通知功能已变为有状态化设计
{\fad(200,200)\pos(1976,2110.666)}即使超过预设的显示时限,只要未被手动滑除,用户仍可随时查看已接收的通知
{\fad(200,200)\pos(1976,1817.333)}说实话,微软这次确实把少数几个功能做得相当到位
{\fad(200,200)\pos(1978.667,2118.666)}操作中心是个非常棒的功能,完成得也很出色。该表扬的地方我绝不吝啬
{\fad(200,200)\pos(1909.334,158.666)}那些气泡通知挺好看的,但没法往里面添加额外的控制元素
{\fad(200,200)\pos(2309.334,475.999)}这玩意儿已经是过去式了,我更喜欢用弹窗提示。总之,咱们继续吧
{\pos(2098.667,2078.667)}Windows通知已今非昔比!\N
你仍可通过注册表修改\N
在新版Windows系统中启用气泡通知功能
{\fad(200,200)\pos(1922.667,177.332)}那么,这部分是视频的技术内容。“新”通知{\fs45\i1}(已经过去十年了){\r}是用XAML编写的
{\fad(200,200)\pos(1869.334,467.999)}你可以从微软商店安装{\b1\c&HFFFFFF&}Notifications Visualizer{\r}来试用它们
{\fad(200,200)\pos(1864.001,1819.999)}我已经在我的Windows 10系统上测试过几条示例通知
{\fad(200,200)\pos(1829.334,2131.999)}通过编程方式运行toast通知可以通过多种方法实现
{\fad(200,200)\pos(1928,1827.999)}有WinAPI的方式—Shell_NotifyIcon(),这是自Windows XP以来用于弹出气泡提示的函数
{\fad(200,200)\pos(1877.334,2110.666)}它在最新的Windows系统上仍然有效。虽然可定制性不足,但能显示基本的通知
{\fad(200,200)\pos(1925.334,1825.333)}COM方式 - IUserNotification和IUserNotification2接口也允许显示气泡通知
{\fad(200,200)\pos(1904.001,2102.666)}后者自Vista起可用。上述两种触发气泡通知的方式均被保留以维持兼容性
{\fad(200,200)\pos(1904.001,1830.666)}现代显示通知的方式是创建一个ToastNotificationManager对象
{\fad(200,200)\pos(1906.668,2118.666)}然后照搬或遵循微软文档,因为只有上帝知道现在到底该怎么做了
{\fad(200,200)\pos(1912.001,1817.333)}幸好,粘贴选项就在眼前!通知可视化工具本质上是一个Toast通知设计器
{\fad(200,200)\pos(1930.668,2102.666)}完成XAML编辑后,可以将Toast导出为代码
{\fad(200,200)\pos(1912.001,1833.333)}有多种语言可供选择。遗憾的是,看起来已经有一个竞争者
{\fad(200,200)\pos(1901.334,2105.333)}在争夺ToastNotificationManager,但你继续使用应该没有问题
{\fad(200,200)\pos(1978.667,1830.666)}很明显这是一团糟,就像Windows系统的多数情况一样。从技术上讲
{\fad(200,200)\pos(1973.334,2107.999)}你现在应该能弹出通知了。但相比于我制作这个视频的真正目的,这点功能实在无趣
{\fad(200,200)\pos(2008.001,1830.666)}拿出证据。我一开始就特别提到过,这些toast是有状态的
{\fad(200,200)\pos(1994.667,2105.333)}它们一直以来都是如此。这意味着toast信息被储存在某处,这就是一个痕迹
{\fad(200,200)\pos(1949.334,1820)}Windows推送通知服务(WNS)负责将通知传递并存储到设备上
{\fad(200,200)\pos(1960.001,2108)}附带说明的是,Toast并非Windows上唯一的通知形式
{\fad(200,200)\pos(1960.001,1828)}用户服务描述为Windows通知提供了分类
{\fad(200,200)\pos(1928.001,2110.667)}“磁贴、吐司和原始”。 “原始”不是一个描述性的名称,“图标”会更好
{\fad(200,200)\pos(1920.001,1825.334)}因此,除了传统的通知弹窗(toasts)外,动态磁贴(live tiles)和
{\fad(200,200)\fs75\pos(1904.001,2081.334)}任务栏应用图标(taskbar application badges)也被视为通知形式,并以与弹窗相同的方式存储。这可能会产生大量信息
{\fad(200,200)\pos(1912.001,1822.667)}Windows 10上最基本的动态磁贴示例。图标功能我没能轻易实现
{\fad(200,200)\pos(1920.001,2100)}所以想象一下一个附带小计数器的通讯应用图标
{\pos(2304,1809.333)}在x上关注Enderman!
{\fad(200,200)\pos(1944.001,1825.333)}那么,Windows究竟把通知信息存储在哪里呢?
{\fad(200,200)\pos(1952.001,2105.333)}首先,你可以在注册表的HKCU项下找到应用程序列表及最后时间戳记录
{\fad(200,200)\pos(1944.001,1822.666)}你也可以通过该注册表项禁用特定系统应用的通知提示
{\fad(200,200)\pos(1933.334,2113.333)}创建一个名为“Enabled”的DWORD值并将其设为0,不过这不是重点
{\fad(200,200)\pos(1949.334,1836)}在PushNotifications下还能获取更多额外信息
{\fad(200,200)\pos(1946.667,2121.333)}不仅如此,最重要的是你可以访问toast通知的内容
{\fad(200,200)\pos(1898.667,1809.333)}通知内容存储在一个名为{\b1\c&HFFFFFF&}wpndatabase.db{\r}的{\b1\c&HFFFFFF&}SQLite{\r}数据库中
{\fad(200,200)\pos(1968,2113.333)}该数据库位于%localappdata%\Microsoft\Windows\ Notifications目录下
{\fad(200,200)\pos(2018.667,1814.666)}数据库运行在WAL{\fs45\i1}(预写式日志){\r}模式下,因此我们多了两个额外文件:
{\fad(200,200)\pos(2024,2102.666)}DB-SHM{\fs45\i1}(共享内存){\r}和DB-WAL——未完成事务日志
{\fad(200,200)\pos(2042.667,1814.666)}有一个{\b1\c&HFFFFFF&}WPNIDM{\r}文件夹,里面包含了所有动态磁贴的元数据
{\fad(200,200)\pos(1949.334,2118.666)}顺便说一下,正如你所见,其中还包括了通知附件。这些内容会被缓存一段时间
{\fad(200,200)\pos(1906.667,1830.666)}从数据分析的角度来看,所有这些数据结合起来使得该文件夹
{\fad(200,200)\pos(1896,2110.666)}尤其是其中的WAL文件——极具研究价值。你可以从中提取出未提交的数据
{\fad(200,200)\pos(1920,1822.666)}现在,我们已经从Windows 10中获取了文件
{\fad(200,200)\pos(1890.667,2113.333)}接下来让我们浏览数据库内容。你可以使用任何数据库查看工具,我这里用的是DataGrip
{\fad(200,200)\pos(1909.334,1822.666)}数据库包含8个表,其中最重要的是
{\fad(200,200)\pos(1869.334,2110.666)}Notification和NotificationData。这两个表存储了通知内容及其他相关信息
{\fad(200,200)\pos(1901.334,1825.333)}数据确实已经结构化了,但当然还有forensic analysts开发的
{\fad(200,200)\pos(1877.334,2110.666)}更便捷的在线视图可供使用。你只需复制、粘贴并运行SQL查询即可
{\fad(200,200)\pos(1888.001,475.999)}我刚才执行的查询将所有数据库内容编译成了一份简洁的小表格,只包含了最重要的信息
{\fad(200,200)\pos(1885.334,161.332)}我在数据库里没找到多少东西,只有动态磁贴。看看WAL文件能不能
{\fad(200,200)\pos(1904.001,459.999)}提供些线索。我们需要运行一个walitean的分支来恢复未提交的数据
{\fad(200,200)\pos(1904.001,179.999)}需要这个分支的原因是整数字节序被弄乱了
{\fad(200,200)\pos(1885.334,473.332)}而Brian Maloney专门为此用例进行了分支。遗憾的是,它是用Python 2编写的
{\fad(200,200)\pos(1888.001,177.332)}它报错了,提示我文件格式无效。这让我思考了一会儿
{\fad(200,200)\pos(1893.334,465.332)}但随后我意识到这意味着WAL文件是空的,因此格式无效
{\fad(200,200)\pos(1922.667,179.999)}我决定迅速填充我的WAL文件。未完成的事务总是要碰运气的
{\fad(200,200)\pos(1928,465.332)}还记得我怎么划掉通知的吗?就是那时候它们被移除了
{\fad(200,200)\pos(1928,179.999)}现在好多了。WAL文件中的事务已添加到新数据库
{\fad(200,200)\pos(1938.667,457.332)}我们现在可以读取了。字段名称仍然未知,但这不成问题
{\fad(200,200)\pos(1898.667,1817.332)}如你所见,表字段虽未知,但它们始终按固定顺序排列
{\fad(200,200)\pos(1901.334,2118.666)}因此我们可以使用另一条预制SQL查询来优雅地输出刚刚揭示的内容
{\fad(200,200)\pos(1901.334,2118.666)}查询结果井然有序。最棒的是,我们还能用通知可视化工具回放这些提示信息!
{\fad(200,200)\pos(1925.334,1833.333)}以上就是本视频的全部内容!我们已成功从目标机器恢复了Toast通知
{\fad(200,200)\pos(1920.001,2105.333)}希望这个视频能对从事取证工作的各位有所帮助
{\fad(200,200)\pos(1933.334,1833.333)}非常感谢观看!希望能和我一样享受制作这个视频的乐趣
{\fad(200,200)\pos(1936.001,2100)}如果有话要说,请给视频评价并留下评论。保重!
{\fad(200,200)\pos(1909.333,220)}原标题:The Secrets of Windows Notifications 原作者:Enderman
{\fad(200,200)\pos(1909.333,220)}原视频上传日期:2025年5月8日
{\fad(200,200)\fscx185\fscy188\pos(1994.666,726.666)}在 Youtube 上关注
{\fad(200,200)\pos(1973.333,1052)}翻译/压制/字幕制作:HAF半个水果
{\fad(200,200)\pos(1914.666,1113.333)}翻译质量权威评价:原来25年就有小拉即用机翻糊弄人了\N
\N
向所有字幕制作及相关人员道一声辛苦了 (*ˊᗜˋ*)/ᵗᑋᵃᐢᵏ ᵞᵒᵘ*\N
感谢字幕组的默默耕耘,你们的每一行字都能让更多人能够跨越语言障碍,享受精彩的内容
{\fad(200,200)}如果你喜欢这个视频,请多多支持和评论哒~ o((>ω< ))o
{\fad(200,200)\pos(1973.333,1052)}字幕制作不易,喜欢的话支持一下我吧!